﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;

using System.Data.OleDb;

/// <summary>
/// Clase que se encarga de la lectura del archivo csv y de de guardar esa infomraion en la base de datos.
/// contiene:
/// public LeerCSV(string _ruta) //constructor
/// public DataTable leerCSV(string file)
/// public bool guardarEnTablas(string file,string finicio,string fFin)
/// </summary>
public class LeerCSV
{
    #region Definicion de variables que se usan en la clase
    bool ok = false;
    string ruta,cad;
    DataTable dt;


    OleDbConnection cnn = new OleDbConnection();
    OleDbCommand cmd;
    OleDbDataAdapter da;
    OleDbDataReader dr;

    //instancia de las clases padres (profesores, horarios,asignaturas y grupo)
    claseAsignaturas asig;
    claseChecador check;
    claseprofesor prof;
    claseGrupo grup;
    claseHorarios horario;

    //clase controladora de csv en inserciones...
    ControladorCSV ctlCsv;
    #endregion


    public LeerCSV(string _ruta)
	{
        ruta = _ruta;
        cad= @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ruta + ";" +
        "Extended Properties='text;HDR=Yes;FMT=Delimited;CharSet=cp1253;'";
	}

    /// <summary>
    /// Metodo que lee el archivo csv de un directorio ya establecido con la ruta del constructor.
    /// </summary>
    /// <param name="file">es el nombre del archivo CSV que se leera como nombre de la tabla</param>
    /// <returns></returns>
    public DataTable leerCSV(string file)
    {
        //orden de index      0    1        2        3          4           5         6     
        string sql = "select dia, hora, num_asig, nomb_asig, num_prof, nomb_prof, nomb_grup from " + file + ";";
        //string sql = "select * from " + file + ";";
        try{
            cnn.ConnectionString=cad;
            cnn.Open();
            cmd = new OleDbCommand(sql, cnn);
            dt = new DataTable();
            dt.Load(cmd.ExecuteReader());
            cnn.Close();
        }
        catch (OleDbException ex){
            Console.WriteLine(ex.Message);
            cnn.Close();
        }
        return dt;
    }


    /// <summary>
    /// Este metodo se encarga de guardar en la base de datos de bdsaa el contenido del archvo csv en las diferentes tablas correspondientes
    /// a saber: profesores, asignaturas, grupos y horarios
    /// </summary>
    /// <param name="file">Es el nombre del archivo</param>
    /// <param name="finicio">fecha que inicia el cuatrimestre</param>
    /// <param name="fFin">Fecha en que termina el cuatrimestre</param>
    /// <returns></returns>
    public bool guardarEnTablas(string file,string finicio,string fFin) {
        string _fechaini,_fechafin;
        ctlCsv = new ControladorCSV();
        string sql = "select dia, hora, num_asig, nomb_asig, num_prof, nomb_prof, nomb_grup from " + file + ";";
        try
        {
            cnn.ConnectionString = cad;
            cnn.Open();
            cmd = new OleDbCommand(sql, cnn);
            dr = cmd.ExecuteReader();
            _fechaini = ctlCsv.convertirFecha(finicio);
            _fechafin = ctlCsv.convertirFecha(fFin);

            //conversion de orden de fechas   yyyy-mm-dd
            string inicio, fin;
            inicio = Convert.ToDateTime(_fechaini).Year + "-" + Convert.ToDateTime(_fechaini).Month + "-" + Convert.ToDateTime(_fechaini).Day;

            fin = Convert.ToDateTime(_fechafin).Year + "-" + Convert.ToDateTime(_fechafin).Month + "-" + Convert.ToDateTime(_fechafin).Day;

            DateTime ff = Convert.ToDateTime(fin);
            DateTime fi = Convert.ToDateTime(inicio).AddMonths(4);

            if (fi.Month <= ff.Month) { 
                #region
                while (dr.Read())
                {
                    //guarda todas las asignaturas...
                    asig = new claseAsignaturas();
                    asig.Id_asig = Convert.ToInt32(dr[2]);
                    asig.Asignatura = Convert.ToString(dr[3]);
                    ctlCsv.guardarAsig(asig);

                    //guarda a los profesores
                    prof = new claseprofesor();
                    prof.Id_prof = Convert.ToInt32(dr[4]);
                    prof.Profesor = Convert.ToString(dr[5]);
                    ctlCsv.guardaProf(prof);

                    //guarda los grupos
                    grup = new claseGrupo();
                    grup.Grupo = Convert.ToString(dr[6]);
                    ctlCsv.guardaGrupos(grup);

                    //guarda todos los horarios
                    horario = new claseHorarios();
                    horario.Dia = Convert.ToInt32(dr[0]);
                    horario.Hora = Convert.ToInt32(dr[1]);
                    horario.Id_prof = Convert.ToInt32(dr[4]);
                    horario.Id_asig = Convert.ToInt32(dr[2]);
                    horario.Grupo = Convert.ToString(dr[6]);
                    horario.FechIni = inicio;
                    horario.FechFin = fin;
                    //falta metodo guarda Horario
                    ctlCsv.guardaHorario(horario);
                }
                #endregion
            }
            cnn.Close();
        }
        catch (OleDbException ex)
        {
            cnn.Close();
        }

        return ok;
    }

}